﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;
using BombermanExcepciones;

namespace Bomberman
{
	[Serializable]
	public class LanzaBombas
	{
		public const String Molotov = "Molotov";
		public const String ToleTole = "ToleTole";

		public const string PoderDestructivo = "PoderDestructivo";
		public const string AlcanceOndaExpansiva = "AlcanceOndaExpansiva";
		public const string Retardo = "Retardo";
		

		private String bombaActual = null;

		[NonSerialized()] private Dictionary<String, Dictionary<String, int>> bombas;

		public LanzaBombas(String tipoBomba = null)
		{
			bombaActual = tipoBomba;
			DefinirBombas();
		}

		private void DefinirBombas()
		{
			bombas = new Dictionary<String, Dictionary<String, int>>();
			AgregarTipoBomba(Molotov, 5, 3, 1);
			AgregarTipoBomba(ToleTole, Bomba.PoderInfinito, 6, 5);
		}

		public void AgregarTipoBomba(String nombre, int poderDestructivo, int alcanceOndaExpansiva, int retardo)
		{
			bombas[nombre] = new Dictionary<String, int>();
			bombas[nombre][PoderDestructivo] = poderDestructivo;
			bombas[nombre][AlcanceOndaExpansiva] = alcanceOndaExpansiva;
			bombas[nombre][Retardo] = retardo;
		}

		[OnDeserializing]
		void OnOnDeserializingMethod(StreamingContext sc)
		{
			DefinirBombas();
		}

		public void SeleccionarBombaTirar(String nombre)
		{
			if (bombas.ContainsKey(nombre) == false) throw new NoExisteTipoDeBombaException();

			bombaActual = nombre;
		}

		public Bomba ObtenerBomba()
		{
			if (bombaActual == null) throw new NoHayBombaSeleccionadaException();

			return new Bomba(bombaActual, bombas[bombaActual][PoderDestructivo], bombas[bombaActual][AlcanceOndaExpansiva], bombas[bombaActual][Retardo]);
		}


		public void ReducirTiempoBombas()
		{
			if (bombas[ToleTole][Retardo] <= 2)
				return;
				
			bombas[ToleTole][Retardo] -= 1;
		}
	}
}
